{smcl}
{* 21aug2021}{...}
{cmd:help mata mm_ipolate()}
{hline}

{title:Title}

{p 4 4 2}
{bf:mm_ipolate() -- Linear interpolation}


{title:Syntax}

{p 8 12 2}
{it:real colvector}
{cmd:mm_ipolate(}{it:x}{cmd:,} {it:y}{cmd:,} {it:xnew} [{cmd:,} {it:outer}]{cmd:)}

{p 8 12 2}
{it:real colvector}
{cmd:_mm_ipolate(}{it:x}{cmd:,} {it:y}{cmd:,} {it:xnew} [{cmd:,} {it:outer}]{cmd:)}

{p 8 12 2}
{it:real colvector}
{cmd:mm_fastipolate(}{it:x}{cmd:,} {it:y}{cmd:,} {it:xnew} [{cmd:,} {it:outer}]{cmd:)}

{p 4 8 2}
where

                     {it:x}:  {it:real colvector x}
                     {it:y}:  {it:real colvector y}
                  {it:xnew}:  {it:real colvector xnew}
                 {it:outer}:  {it:real scalar outer}


{title:Description}

{p 4 4 2} {cmd:mm_ipolate()} assumes {it:y} to be piecewise
linear in {it:x} and returns the linear interpolation of {it:y} at
the values in {it:xnew}. Averages of {it:y} are used where {it:x}
values are tied.

{p 4 4 2} {it:outer}!=0 specifies that the (average) {it:y}
value corresponding to min({it:x}) or max({it:x}) be returned
for {it:xnew} values below or above the support of {it:x}, respectively. The
default is to return missing for {it:xnew} values that are outside
the support of {it:x}.

{p 4 4 2} {cmd:_mm_ipolate()} is like {cmd:mm_ipolate()} but assumes that {it:x} and 
{it:xnew} are in ascending sort order.

{p 4 4 2} {cmd:mm_fastipolate()} is like {cmd:mm_ipolate()} but assumes that {it:x} and 
{it:xnew} are in ascending sort order and that the values in {it:x} are unique.


{title:Remarks}

{p 4 4 2} Simple example:

        {com}: x = (1 \ 2)

        : y = (10 \ 20)

        : mm_ipolate(x, y, 1.2)
        {res}  12{txt}


{title:Conformability}

    {cmd:mm_ipolate(}{it:x}{cmd:,} {it:y}{cmd:,} {it:xnew}{cmd:,} {it:outer}{cmd:)}
           {it:x}: {it:n x} 1
           {it:y}: {it:n x} 1
        {it:xnew}: {it:r x} 1
       {it:outer}: 1 {it:x} 1
      {it:result}: {it:r x} 1.


{title:Diagnostics}

{p 4 4 2}
The functions do not take any special action to treat missing values.


{title:Source code}

{p 4 4 2}
{help moremata_source##mm_ipolate:mm_ipolate.mata}


{title:Author}

{p 4 4 2} Ben Jann, University of Bern, ben.jann@soz.unibe.ch


{title:Also see}

{p 4 13 2}
Online:  help for {bf:{help ipolate}}, {bf:{help mf_mm_polint:mm_polint()}},
{bf:{help m4_utility:[M-4] utility}},
{bf:{help moremata}}
